今天要聊到 IOCP 也是一種非同步 IO 的處理方案, 是由 windows 提供的, 而昨天的 epoll 則是 linux 提供的非同步 IO 處理方案。不過說是處理方案, 我更覺得他們是一種排程演算法, 他們提供了一種面對非同步 IO 時調度 thread 的作法。
此外, 他們跟我們的主題有著很大的關係, 非同步 IO 不就是 JS 中最常見的非同步嗎, 這些東西的原理顯然跟 node 的實踐有所關連。
https://zh.wikipedia.org/wiki/IOCP
簡單來說, IOCP 就是一種非同步監聽 IO 的方法, 其跟 linux 中的 epoll 有著差不多的關係, 而實際上我個人覺得這兩種演算法的思路也是差不多, 只是實踐上有一些分歧而已。
IOCP 提供介面讓使用者註冊事件, 也提供方法可以 non-blocking 的運行, 運行完成後觸發特定事件。
還有一個方法是使 thread 沉睡, 當事件發生時才被喚醒, 這三個工具的組合可以實踐出 IOCP modle
以下簡述流程 :
利用 IOCP 實踐第二天的 http server , 裡面會利用 IOCP 而擁有 schedule 機制。
明天見 !